package com.zhiyou.shiro;

import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.util.ByteSource;

//继承它 AuthorizingRealm
// 有两个方法    分别是认证 和授权
public class ShiroRealm extends AuthorizingRealm {


    //认证    登录的时候会调用此方法
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        System.out.println("==========认证方法被调用 =================");
        //自己写代码 实现认证操作
        //获取用户名
        UsernamePasswordToken token=(UsernamePasswordToken) authenticationToken;
        String username = token.getUsername();
        System.out.println("username = ==========" + username);
        //根据用户名查询数据库 获取密码
        String password="123456";
        //把用户名密码 封装到   AuthenticationInfo   中 返回此对象
        //参数1 是用户名
        //参数2 是密码
        //参数3 是 当前realm的名字 直接调用 getName()即可
        //SimpleAuthenticationInfo info=new SimpleAuthenticationInfo(username,password,getName());


        //使用盐值加密
        ByteSource salt=ByteSource.Util.bytes(username);
        SimpleAuthenticationInfo info=new SimpleAuthenticationInfo(username,password,salt,getName());
        //剩下的操作（对比是否相同）交给 shiro  authenticationToken 里面有 用户名数据
        return info;
    }

    //授权    获取权限的时候会调用此方法
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        System.out.println("==========授权方法被调用===================");
        return null;
    }


}
